// src/router/index.ts

import { createRouter, createWebHistory, RouteRecordRaw, Router } from 'vue-router';
import { useUserStore } from '@/stores/user';
import { showMessage } from '@/utils/message';
import NProgress from 'nprogress'; // 进度条
import 'nprogress/nprogress.css'; // 进度条样式

// 路由组件自动导入
// const modules = import.meta.glob('@/views/**/*.vue');

// 系统路由（无需权限）
// 系统路由（无需权限）
export const constantRoutes: RouteRecordRaw[] = [
    // // 临时添加登录页路由（虽然不需要权限，但确保路由存在）
    // {
    //     path: '/login',
    //     name: 'Login',
    //     component: () => import('@/views/Login/index.vue'),
    //     meta: { title: '登录', hidden: true }
    // },
    // // 添加404路由（确保路由存在）
    // {
    //     path: '/404',
    //     name: '404',
    //     component: () => import('@/views/Error/404.vue'),
    //     meta: { title: '404', hidden: true }
    // },
    // 修复问题：添加/index路由
    {
        path: '/index',
        name: 'home',
        component: () => import('@/views/index/index.vue'),
        meta: { title: '首页' },
        children:[
            {
                path: '/tts',
                name: 'tts',
                component: () => import('@/views/tts/index.vue'),
                meta: { title: '文案配音' },
            },
            {
                path: '/dg_human',
                name: 'dg_human',
                component: () => import('@/views/digitalhuman/index.vue'),
                meta: { title: '数字人' },
            }
        ]
    },
    {
        path: '/',
        redirect: '/index', // 重定向到/index
    },
    // 添加404通配路由
    {
        path: '/:pathMatch(.*)*',
        redirect: '/404'
    }
];

// 动态路由（需要权限）
// export const asyncRoutes: RouteRecordRaw[] = [
//     {
//         path: '/system',
//         name: 'System',
//         component: modules['../layout/index.vue'],
//         meta: { title: '系统管理', icon: 'system', roles: ['admin'] },
//         children: [
//             {
//                 path: 'user',
//                 name: 'User',
//                 component: modules['../views/System/User/index.vue'],
//                 meta: { title: '用户管理', icon: 'user' }
//             },
//             {
//                 path: 'role',
//                 name: 'Role',
//                 component: modules['../views/System/Role/index.vue'],
//                 meta: { title: '角色管理', icon: 'role' }
//             },
//             {
//                 path: 'menu',
//                 name: 'Menu',
//                 component: modules['../views/System/Menu/index.vue'],
//                 meta: { title: '菜单管理', icon: 'menu' }
//             }
//         ]
//     },
//     {
//         path: '/example',
//         name: 'Example',
//         component: modules['../layout/index.vue'],
//         meta: { title: '示例页面', icon: 'example' },
//         children: [
//             {
//                 path: 'table',
//                 name: 'Table',
//                 component: modules['../views/Example/Table/index.vue'],
//                 meta: { title: '表格示例', icon: 'table' }
//             },
//             {
//                 path: 'form',
//                 name: 'Form',
//                 component: modules['../views/Example/Form/index.vue'],
//                 meta: { title: '表单示例', icon: 'form' }
//             },
//             {
//                 path: 'chart',
//                 name: 'Chart',
//                 component: modules['../views/Example/Chart/index.vue'],
//                 meta: { title: '图表示例', icon: 'chart' }
//             }
//         ]
//     }
// ];

// 创建路由实例
const router: Router = createRouter({
    history: createWebHistory(import.meta.env.BASE_URL),
    routes: constantRoutes,
    scrollBehavior(to, from, savedPosition) {
        // 页面切换时滚动到顶部
        if (savedPosition) {
            return savedPosition;
        } else {
            return { top: 0 };
        }
    }
});

// 配置NProgress
NProgress.configure({ showSpinner: false });

// 路由守卫
router.beforeEach(async (to, from, next) => {
    // 开始进度条
    NProgress.start();

    // const userStore = useUserStore();

    // 设置页面标题
    // document.title = to.meta.title ? `${to.meta.title} - ${import.meta.env.VITE_APP_TITLE}` : import.meta.env.VITE_APP_TITLE;

    // // 判断是否登录
    // const isLoggedIn = !!userStore.token;
    //
    // // 访问登录页
    // if (to.path === '/login') {
    //     // 如果已登录，跳转到首页
    //     if (isLoggedIn) {
    //         next({ path: '/' });
    //         NProgress.done();
    //     } else {
            next();
    //     }
    //     return;
    // }

    // 未登录状态
    // if (!isLoggedIn) {
    //     // 重定向到登录页
    //     next(`/login?redirect=${to.path}`);
    //     NProgress.done();
    //     return;
    // }

    // 已经登录，但用户信息不存在，获取用户信息
    // if (!userStore.userInfo) {
    //     try {
    //         await userStore.getUserInfo();
    //     } catch (error) {
    //         // 获取用户信息失败，清除token并跳转到登录页
    //         userStore.resetToken();
    //         showMessage('获取用户信息失败，请重新登录', 'error');
    //         next(`/login?redirect=${to.path}`);
    //         NProgress.done();
    //         return;
    //     }
    // }

    // 动态添加路由
    // if (!userStore.isRoutesAdded) {
    //     try {
    //         // 根据用户角色过滤路由
    //         const filteredRoutes = filterRoutes(asyncRoutes, userStore.roles);
    //
    //         // 添加动态路由
    //         filteredRoutes.forEach(route => {
    //             router.addRoute(route);
    //         });
    //
    //         // 添加404路由
    //         router.addRoute({
    //             path: '/:catchAll(.*)',
    //             redirect: '/404',
    //             hidden: true
    //         });
    //
    //         // 设置路由已添加状态
    //         userStore.setRoutesAdded(true);
    //
    //         // 添加路由后，重定向到原始路由
    //         next({ ...to, replace: true });
    //         return;
    //     } catch (error) {
    //         showMessage('路由加载失败', 'error');
    //         next(`/login?redirect=${to.path}`);
    //         NProgress.done();
    //         return;
    //     }
    // }

    // 检查访问权限
    // if (to.meta.roles && !hasPermission(to.meta.roles, userStore.roles)) {
    //     // 没有权限，跳转到401页面
    //     next({ path: '/401', replace: true });
    //     NProgress.done();
    //     return;
    // }

    next();
});

// 路由后置钩子
router.afterEach(() => {
    // 结束进度条
    NProgress.done();
});

/**
 * 过滤路由（根据角色权限）
 * @param routes 路由数组
 * @param roles 用户角色
 */
function filterRoutes(routes: RouteRecordRaw[], roles: string[]): RouteRecordRaw[] {
    return routes.filter(route => {
        if (route.meta?.roles) {
            return hasPermission(route.meta.roles, roles);
        }
        return true;
    }).map(route => {
        if (route.children) {
            route.children = filterRoutes(route.children, roles);
        }
        return route;
    });
}

/**
 * 检查是否有权限
 * @param requiredRoles 需要的角色
 * @param userRoles 用户角色
 */
// function hasPermission(requiredRoles: string[], userRoles: string[]): boolean {
//     if (!requiredRoles || requiredRoles.length === 0) return true;
//     return userRoles.some(role => requiredRoles.includes(role));
// }

export default router;